/*
ID: quxiao82
LANG: C++
PROG: cryptcow
*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <string>
using namespace std;

const int NUM = 80;
const int HASH_NUM = 502973;//531071;
string str;
const string finalStr = "Begin the Escape execution at the Break of Dawn";
bool hashVisited[HASH_NUM];
// char str[NUM];
// const char* finalStr = "Begin the Escape execution at the Break of Dawn";

//set<unsigned int> hashes;

void Input ()
{
	getline(cin, str);
	/*	gets(str);*/
}

unsigned int elf_hash(string str)
{
	unsigned long h = 0, g, i, l;
	l = str.length();
	for (i = 0; i < l; i ++)
	{
		h = (h << 4) + str[i];
		if (g = h & 0xf0000000l)
			h ^= g >> 24;
		h &= ~g;
	}
	return h % HASH_NUM;
}

int CheckCOWNum (string str)
{
	int i, l;
	int nC, nO, nW;
	nC= nO = nW = 0;
	l = str.length();

	// 	unsigned int hash;
	// 	hash = RSHash(str);
	// 	if ( hashes.find(hash) != hashes.end() )
	// 	{
	// 		return false;
	// 	}
	// 	else
	// 	{
	// 		hashes.insert(hash);
	// 	}
	for (i = 0; i < l; i ++)
	{
		if ( str[i] == 'C' )
			++ nC;
		else if ( str[i] == 'O' )
		{
			// 			if ( nC <= nO )
			// 				return -1;
			++ nO;
		}
		else if ( str[i] == 'W' )
		{
			// 			if ( nO <= nW )
			// 				return -1;
			++ nW;
		}
	}
	if ( nC == nO && nO == nW )
		return nC;
	else
		return -1;
}

//idx1 < idx2 < idx3
string RestoreString (string now, int idx1, int idx2, int idx3)
{
	string pre = "";
	int i, l;
	l = now.length();
	pre = now.substr(0, idx1);
	pre += now.substr(idx2+1, idx3-idx2-1);
	pre += now.substr(idx1+1, idx2-idx1-1);
	pre += now.substr(idx3+1, l-idx3-1);

	return pre;
}

// char* RestoreString (char* now, int idx1, int idx2, int idx3)
// {
// //	char pre[NUM];
// 	char* pre = new char[NUM];
// 	int i, l;
// 	l = strlen(now);
// 
// 	strcpy(pre, "");
// 	strncat(pre, now, idx1);
// 	strncat(pre, now+idx2+1, idx3-idx2-1);
// 	strncat(pre, now+idx1+1, idx2-idx1-1);
// 	strncat(pre, now+idx3+1, l-idx3-1);
// 
// 	return pre;
// }

bool CheckBetweenCOW (string str)
{
	int lastIdx;
	int i, l;
	lastIdx = -1;
	l = str.length();
	for (i = 0; i < l; i ++)
	{
		if ( str[i] == 'C' || str[i] == 'O' || str[i] == 'W' )
		{
			if ( finalStr.find(str.substr(lastIdx + 1, i - lastIdx - 1)) == string::npos )
			{
				return false;
			}
			lastIdx = i;
		}
	}
	return true;
}

bool CheckStr (string str)
{
	if ( str == finalStr )
		return true;

	int hash;
	hash = elf_hash(str);
	if ( hashVisited[hash] )
		return false;
	hashVisited[hash] = true;

// 	if ( ! CheckBetweenCOW(str) )
// 		return false;

	int i, j, k, l;
	int cNum, oNum, wNum, allNum;
	int cIdx[NUM], oIdx[NUM], wIdx[NUM], allIdx[NUM];
	cNum = oNum = wNum = allNum = 0;
	l = str.length();

	allIdx[allNum++] = -1;
	for (i = 0; i < l; i ++)
	{
		if ( str[i] == 'C' )
		{
			cIdx[cNum++] = i;
			allIdx[allNum++] = i;
		}
		else if ( str[i] == 'O' )
		{
			oIdx[oNum++] = i;
			allIdx[allNum++] = i;
		}
		else if ( str[i] == 'W' )
		{
			wIdx[wNum++] = i;
			allIdx[allNum++] = i;
		}
	}
	if ( allIdx[allNum-1] != l - 1 )
		allIdx[allNum++] = l;

	if ( cNum )
	{
		if ( cIdx[0] > oIdx[0] || cIdx[0] > wIdx[0] )
			return false;
		if ( wIdx[wNum-1] < cIdx[cNum-1] || wIdx[wNum-1] < oIdx[oNum-1] )
			return false;
	}

	for (i = 0; i < allNum-1; i ++)
	{
		if ( finalStr.find(str.substr(allIdx[i]+1, allIdx[i+1]-allIdx[i]-1)) == string::npos )
			return false;
	}

	for (i = 0; i < cNum; i ++)
	{
		for (j = 0; j < oNum; j ++)
		{
			for (k = 0; k < wNum; k ++)
			{
				if ( cIdx[i] < oIdx[j] && oIdx[j] < wIdx[k] )
				{
					if ( CheckStr( RestoreString(str, cIdx[i], oIdx[j], wIdx[k])) )
						return true;
				}
			}
		}
	}

// 	for (i = 0; i < l; i ++)
// 	{
// 		if ( str[i] != 'C' )
// 			continue;
// 		for (j = i + 1; j < l; j ++)
// 		{
// 			if ( str[j] != 'O' )
// 				continue;
// 			for (k = j + 1; k < l; k ++)
// 			{
// 				if ( str[k] != 'W' )
// 					continue;
// 				if ( CheckStr( RestoreString(str, i, j, k)) )
// 					return true;
// 			}
// 		}
// 	}


 	return false;
}

// bool CheckStr (char* str)
// {
// //	printf("%s\n", str);
// 	if ( strcmp(str, finalStr) == 0 )
// 		return true;
// 	int i, j, k, l;
// 	char* restoreStr;
// 	l = strlen(str);
// 
// 	for (i = 0; i < l; i ++)
// 	{
// 		if ( str[i] != 'C' )
// 			continue;
// 		for (j = i + 1; j < l; j ++)
// 		{
// 			if ( str[j] != 'O' )
// 				continue;
// 			for (k = j + 1; k < l; k ++)
// 			{
// 				if ( str[k] != 'W' )
// 					continue;
// 				restoreStr = RestoreString(str, i, j, k);
// 				if ( CheckStr( restoreStr ) )
// 					return true;
// 				free(restoreStr);
// 			}
// 		}
// 	}
// 	return false;
// }



void Solve ()
{
	if ( (str.length() - finalStr.length()) % 3 != 0 )
	{
		printf("0 0\n");
		return;
	}
	// 	if ( !CheckBetweenCOW(str) )
	// 	{
	// 		printf("0 0\n");
	// 		return;
	// 	}
	int nCOW = CheckCOWNum(str);
	if ( nCOW == -1 || !CheckStr(str) )
	{
		printf("0 0\n");
		return;
	}
	printf("1 %d\n", nCOW);
}


int main ()
{
	freopen( "cryptcow.in", "r" , stdin );
	freopen( "cryptcow.out", "w" , stdout );

	Input ();
	Solve ();

	return 0;
}
